/**
 * 我们新建 api/index.js，目的是为了能统一管理起来所有的请求，后期更好维护
 * 其实脚手架的 router/index.js 之所以抽离出来，也是为了更好的管理路由配置
 */

// 1️⃣ 导入自己封装的 axios 实例
import { getToken } from '@/utils/myToken'
import request from '@/utils/request'

// 2️⃣ 导出接口函数
export const userLogin = (data) => {
  // 函数返回值
  return request({
    method: 'POST', // 方式请求：POST
    url: '/login', // 请求地址：/login
    data: data, // 请求参数：调用函数的时候传入
  })
}

// 建议大家再自己写一遍，熟悉 axios 库的用法
export const userRegister = (data) => {
  return request({
    method: 'POST',
    url: '/register',
    data: data,
  })
}

// 用户详情 - 需要验证:【Authorization】
export const userDetail = (id) => {
  return request({
    method: 'GET',
    url: `/user/${id}`,
    headers: {
      Authorization: getToken(),
    },
  })
}

// 上传文件 - 需要验证:【Authorization】
export const uploadFile = (file) => {
  return request({
    method: 'POST',
    url: `/upload`,
    data: file,
    headers: {
      Authorization: getToken(),
    },
  })
}

// 编辑用户信息 - 需要验证:【Authorization】

// userUpdate({ id: 11, username: '你好', nickname: 'xxx' })
// 先把 id 结构出来，在把剩余的所有参数保存到 data 中
// ...data   ES6剩余参数
export const userUpdate = ({ id, ...data }) => {
  return request({
    method: 'POST',
    url: `/user_update/${id}`,
    data: data,
    headers: {
      Authorization: getToken(),
    },
  })
}

/* 关注一共有 3 个接口 */
// 关注接口1. 获取用户关注列表
export const getUserFollows = () => {
  return request({
    method: 'GET',
    url: `/user_follows`,
    headers: {
      Authorization: getToken(),
    },
  })
}

// 关注接口2. 根据id添加关注
export const addUserFollowsById = (id) => {
  return request({
    method: 'GET',
    url: `/user_follows/${id}`,
    headers: {
      Authorization: getToken(),
    },
  })
}

// 关注接口3. 根据 id 取消关注
export const removeUserFollowsById = (id) => {
  return request({
    method: 'GET',
    url: `/user_unfollow/${id}`,
    headers: {
      Authorization: getToken(),
    },
  })
}

// ------- 首页相关的接口 -------
// 获取栏目列表
export const getCategory = () => {
  return request({
    method: 'GET',
    url: `/category`,
    headers: {
      Authorization: getToken(),
    },
  })
}

// 获取文章列表
// { category , pageSize, pageIndex }
export const getPostList = (params) => {
  return request({
    method: 'GET', // GET 请求
    url: `/post`, // 请求地址
    params: params, // axios规定：GET请求传参需要通过 params 属性，POST 请求传参通过 data 属性
    // 请求参数
    headers: {
      Authorization: getToken(),
    },
  })
}

// 获取收藏文章列表
export const getStarList = () => {
  return request({
    method: 'GET', // GET 请求
    url: `/user_star`, // 请求地址
    headers: {
      Authorization: getToken(),
    },
  })
}

// 获取文章详情
// 已经登录：验证:【Authorization】 - 登录的状态下：返回的结果中有 点赞的数量，是否关注。
// 没有登录：返回的知识普通的文章展示。
export const getPostById = (id) => {
  return request({
    method: 'GET', // GET 请求
    url: `/post/${id}`, // 请求地址
    headers: {
      Authorization: getToken(),
    },
  })
}

// 根据 id 对文章 点赞 或 取消点赞
export const updatePostLikeById = (id) => {
  return request({
    method: 'GET', // GET 请求
    url: `/post_like/${id}`, // 请求地址
    headers: {
      Authorization: getToken(),
    },
  })
}

// 根据 文章id 获取评论列表
export const getPostCommentById = (id) => {
  return request({
    method: 'GET', // GET 请求
    url: `/post_comment/${id}`, // 请求地址
  })
}

// 发布评论 - 增加
export const addPostComment = ({ id, ...data }) => {
  return request({
    method: 'POST', // GET 请求
    url: `/post_comment/${id}`, // 请求地址
    data: data,
    headers: {
      Authorization: getToken(),
    },
  })
}

// 获取用户评论列表
export const getUserComment = () => {
  return request({
    method: 'GET', // GET 请求
    url: `/user_comments/`, // 请求地址
    headers: {
      Authorization: getToken(),
    },
  })
}

// 获取搜索文章列表
export const getPostSearch = (params) => {
  return request({
    method: 'GET', // GET 请求
    url: `/post_search`, // 请求地址
    params: params,
  })
}

// 发布新文章，需要传递 5 个必要参数
export const addPostArticle = (data) => {
  return request({
    method: 'POST', // GET 请求
    url: `/post`, // 请求地址
    data: data,
    headers: {
      Authorization: getToken(),
    },
  })
}

// 编辑文章，id 为必传参数
export const updatePostArticle = ({ id, ...data }) => {
  return request({
    method: 'POST', // GET 请求
    url: `/post_update/${id}`, // 请求地址
    data: data,
    headers: {
      Authorization: getToken(),
    },
  })
}

// ❓ 思考：为什么要导出函数？
//   答：因为函数可以传参(接口传参)，可以设置返回值
